Red Hat System Administration II 8.2

Планирование повторяющихся пользовательских заданий

Задачи

После завершения этого раздела вы сможете запланировать выполнение команд по повторяющемуся расписанию с помощью пользовательского файла crontab.

Повторяющиеся пользовательские задания

Задания, запланированные для многократного выполнения, называются повторяющимися заданиями. Системы Red Hat Enterprise Linux поставляются с демоном crond в пакете cronie, который включается и запускается по умолчанию специально для повторяющихся заданий. Демон crond считывает несколько файлов конфигурации, по одному на пользователя (отредактировать их можно с помощью команды crontab), и набор системных файлов. Эти файлы конфигурации позволяют пользователям и администраторам контролировать время выполнения повторяющихся заданий.

Если поток вывода или поток ошибок запланированной команды не перенаправляется, демон crond пытается отправить этот вывод или ошибку по электронной почте пользователю, которому принадлежит это задание (если этот параметр не переопределен), используя настроенный в системе почтовый сервер. В зависимости от среды может потребоваться дополнительная настройка. Поток вывода и поток ошибок запланированной команды можно направить в разные файлы.

Планирование повторяющихся пользовательских заданий

Обычные пользователи могут управлять заданиями с помощью команды crontab. Ее можно вызывать четырьмя способами.

Таблица 2.1. Примеры использования команды crontab

КомандаНазначение
crontab -l

Отображение заданий текущего пользователя.

crontab -r

Удаление всех заданий текущего пользователя.

crontab -e

Изменение заданий текущего пользователя.

crontab filename

Удаление всех заданий и их замена заданиями из файла filename. Если файл не указан, используется stdin (стандартный поток ввода).


Примечание

Привилегированный пользователь может использовать опцию -u с командой crontab для управления заданиями другого пользователя. Не используйте команду crontab для управления системными заданиями. Вместо этого применяйте методы, описанные в следующем разделе.

Формат пользовательского задания

Команда crontab -e по умолчанию вызывает редактор Vim, если в переменной среды EDITOR не было указано что-то другое. Вводите по одному заданию на строку. Другие допустимые записи: пустые строки (обычно для удобства чтения), комментарии, начинающиеся с символа решетки (#), переменные среды в формате ИМЯ=значение, которые действует для всех строк ниже объявления переменной. К наиболее часто используемым переменным относятся: переменная SHELL, объявляющая оболочку для интерпретации оставшихся строк файла crontab, и переменная MAILTO, определяющая получателя вывода по электронной почте.

Важно

Для отправки почты может потребоваться дополнительная настройка локального почтового сервера или ретранслятора.

Поля в файле crontab отображаются в следующем порядке:

  • Minutes (минуты)

  • Hours (часы)

  • Day of month (день месяца)

  • Month (месяц)

  • Day of week (день недели)

  • Команда

Важно

Если значения в полях Day of Month и Day of Week отличаются от *, команда выполняется, когда любое из этих полей удовлетворяет условиям. Например, чтобы команда выполнялась 15-го числа каждого месяца и каждую пятницу в 12:15, используйте следующий формат задания:

15 12 15 * Fri command

Первые пять полей используют одинаковые синтаксические правила:

  • * для «неважно»/всегда.

  • Число для обозначения минут или часов, даты или дня недели. Для дней недели 0 означает воскресенье, 1 — понедельник, 2 — вторник и т. д. 7 также означает воскресенье.

  • x-y для диапазона от x до y включительно.

  • x,y для списков. Списки также могут содержать диапазоны. Например, 5,10-13,17 в столбце Minutes указывает, что задание должно выполняться через 5, 10, 11, 12, 13 и 17 минут после начала часа.

  • */x для обозначения интервала x. Например, */7 в столбце Minutes будет запускать задание каждые семь минут.

Кроме того, для месяцев и дней недели можно использовать трехбуквенные английские сокращения, например Jan, Feb и Mon, Tue.

Последнее поле содержит команду, которая должна быть выполнена с использованием командной оболочки по умолчанию. Можно использовать переменную среды SHELL, чтобы изменить оболочку для запланированной команды. Если команда содержит неэкранированный символ процента (%), он будет считаться символом новой строки, а все данные после него будут переданы команде в stdin.

Пример повторяющихся пользовательских заданий

В этом разделе приведено несколько примеров повторяющихся заданий.

  • Следующее задание выполняет команду /usr/local/bin/yearly_backup ежегодно 2 февраля ровно в 9:00.

    0 9 2 2 * /usr/local/bin/yearly_backup
  • Следующее задание отправляет сообщение электронной почты, содержащее слово Chime, владельцу этого задания каждые пять минут с 9:00 до 17:00 каждую пятницу в июле.

    */5 9-16 * Jul 5 echo "Chime"

    Вышеуказанный диапазон часов 9-16 означает, что таймер задания запускается с девятого часа (09:00) и выполняется до конца шестнадцатого часа (16:59). Задание начинает выполняться в 09:00 с последним исполнением в 16:55, поскольку через пять минут после 16:55 уже будет 17:00, что выходит за рамки указанного диапазона часов.

  • Следующее задание выполняет команду /usr/local/bin/daily_report каждый будний день за две минуты до полуночи.

    58 23 * * 1-5 /usr/local/bin/daily_report
  • Следующее задание выполняет команду mutt для отправки электронного письма Checking in получателю boss@example.com каждый рабочий день (c понедельника по пятницу) в 9:00.

    0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi there boss, just checking in.

Ссылки

Man-страницы crond(8), crontab(1) и crontab(5)